package com.itany.corejava.code07_常用类.object;

/**
 * @author MissChen
 * @date 2024年02月27日 11:09
 */
public class TestClone {
    public static void main(String[] args) throws CloneNotSupportedException {
        testClone();
    }

    public static void testClone() throws CloneNotSupportedException {
        Address address = new Address("江苏省", "南京市");
        Person2 p = new Person2("alice", 20, address);
        System.out.println(p);
        System.out.println("-------------------");
        // alt+enter
        // 如果在Person2中重写clone方法，调用后会报错:java.lang.CloneNotSupportedException
        // 表示不被支持克隆的异常
        // 因此，对于克隆方法，克隆对象必须满足以下条件
        // 克隆的类必须实现Cloneable 接口, 表示该类可以被克隆
        // 克隆的类必须重写clone 方法, 方法中直接调用Object提供的克隆方
        // 法即可。即: super.clone()
        Object obj = p.clone();
        System.out.println(obj);
        System.out.println("******************");
        if(obj instanceof  Person2){
            Person2 p2=(Person2)obj;

            // 只克隆第一层, 所有的对其他对象的引用仍然使用原来的对象
            p2.setName("jack");
            p2.setAge(34);

            p2.getAddress().setProvince("山东省");
            p2.getAddress().setCity("青岛市");
            System.out.println(p);
            System.out.println(p2);

        }
    }
}
